// Custom scripts
$(function() {
    function resizeWrapper() {
        var $wrapper = $('#page-wrapper'),
            $iframes = $wrapper.find('iframe'),
            wrapper_height = $(window).height() - 46;
        
        $wrapper.height(wrapper_height);
        $iframes.height(wrapper_height - 89);
    };
    resizeWrapper();
    $(window).resize(function() {
        resizeWrapper();
    });
    // MetsiMenu
    $('#side-menu').metisMenu();
    //侧边栏菜单控制tab
    $('#side-menu > li').on('click', function(e) {
        var i = $(this).index();
        var tab = $('#page-wrapper .nav-tabs > li:eq(' + i + ')');
        tab.removeClass('hidden');
        tab.children('a').trigger('click');
    });
    //控制iframe的src
    function changeIframe(myLink) {
            var i = myLink.parents('.nav-first-level').index() + 1;
            $('#tab-' + i + '>iframe').attr("src", myLink.attr("href"));
        }
    //一级菜单
    $('#side-menu > li > a').on('click', function(e) {
        e.preventDefault();
        if (!$(this).siblings('ul').length) {
            changeIframe($(this));
        }
    });
    //二级菜单
    $('#side-menu .nav-second-level > li > a').on('click', function(e) {
        e.preventDefault();
        if (!$(this).siblings('ul').length) {
            changeIframe($(this));
        }
    });
    //三级菜单
    $('#side-menu .nav-third-level > li > a').on('click', function(e) {
        e.preventDefault();
        e.stopPropagation();
        $('.nav-focus').removeClass('nav-focus');
        $(this).addClass('nav-focus');
        changeIframe($(this));
    });
    //顶部导航栏
    //用户管理
	$('.user-management > .dropdown-menu a:not(.logout)').on('click', function(e) {
	    e.preventDefault();
	    var href = $(this).attr("href");
	    var a = $("#tab-user-center");
	    a.parent().removeClass("hidden");
	    $("#tab-content-user-center").children("iframe").attr("src", href);
	    a.trigger("click");
	});
	//创建“个人中心”tab
	function createUserCenterTab(){
		var li = $("<li><a data-toggle='tab' href='#tab-content-user-center' id='tab-user-center'><i class='fa fa-file-text-o'></i><span class='nav-label'>个人中心</span><i class='tclose icon-close'></i></a></li>");
		$("#main-head-tabs").append(li);
		var div = $("<div id='tab-content-user-center' class='tab-pane'><iframe src='' width='100%' frameborder='0'></iframe></div>");
		$("#main-tab-content").append(div);
		return li.children("a");
	};
	createUserCenterTab();
    //系统设置
    // $('.setting > a').on('click', function(e) {
    //     e.preventDefault();
    //     var sideMenu = $('#side-menu > li:nth-last-of-type(2) > a')
    //     sideMenu.trigger('click');
    // });
    //tab控制侧边栏
    $('#page-wrapper .nav-tabs > li > a').on('click', function(e) {
        var i = $(this).parent().index();
        var activeMenu = $('#side-menu > li.active');
        var sideMenu = $('#side-menu > li:eq(' + i + ')');
        if (activeMenu.length) {
            activeMenu.removeClass('active');
            activeMenu.children('ul.nav').removeClass('in');
            sideMenu.addClass('active');
            sideMenu.children('ul.nav').addClass('in');
        }
    });
    //关闭tab
    $('.tclose').on('click', function(e) {
        e.preventDefault();
        e.stopPropagation();
        var tab = $(this).parent().parent();
        var i = tab.index() + 1;

        tab.addClass('hidden'); //关闭此标签

        if (tab.hasClass('active')) {
            var nextShowTabs = tab.nextAll(":not(.hidden)");
            var j = nextShowTabs.length;

            if (j > 0) {
                tab.nextAll(":not(.hidden):first").children('a').trigger('click'); //如果是关闭当前tab且不是最后一个,显示下一个非"hidden"的tab
            } else {
                tab.prevAll(":not(.hidden):first").children('a').trigger('click'); //如果是关闭当前tab且是最后一个,显示上一个非"hidden"的tab
            }
        }
    });
})
$(function() {
        //table 全选

        $('#checkAll').on('ifChanged', function(event) {
            if (this.checked) {
                $(this).parents('table').find('input[type=checkbox]').iCheck('check');
            } else { //反之 取消全选   
                $(this).parents('table').find('input[type=checkbox]').iCheck('uncheck');
            }
        })
        $('tr input[type=checkbox]').on('ifChanged', function(event) {
            if (this.checked) {
                $(this).parents('tr').addClass('checked');
            } else { //反之 取消全选   
                $(this).parents('tr').removeClass('checked');
            }
        })

        // check treeview js
        $('.css3-treeview').delegate("label input:checkbox", "change", function(e) {
            e.stopPropagation();
            var
                checkbox = $(this),
                nestedList = checkbox.parent().next().next(),
                nestedListCheckbox = nestedList.find("input:checkbox");

            if (checkbox.is(":checked")) {
                return nestedListCheckbox.prop("checked", true);
            }
            nestedListCheckbox.prop("checked", false);
        });
        // panel heading select all
        $('.select-tree').delegate("input:checkbox", "change", function(e) {
            e.stopPropagation();
            var
                checkbox = $(this),
                nestedList = checkbox.parents('.panel-heading').next('.panel-body').find('.css3-treeview'),
                nestedListCheckbox = nestedList.find("input:checkbox");
            if (checkbox.is(":checked")) {
                return nestedListCheckbox.prop("checked", true);
            }
            nestedListCheckbox.prop("checked", false);
        });
        // collapse treeview panel
        var treePanelHeading = $('.select-tree').parent('.panel-heading');
        treePanelHeading.css({
            cursor: 'pointer',
            'user-select': 'none'
        });
        treePanelHeading.next('.panel-body').addClass('hidden');
        treePanelHeading.on('click', function(e) {
            $(this).next('.panel-body').toggleClass('hidden');
        });
        // collapse treeview
        $('.css3-treeview ul > li').each(function() {
            var li = $(this),
                arrow = li.children('span'),
                childLi = li.children('ul').children('li');

            if (childLi.length) {
                arrow.on('click', function(e) {
                    li.toggleClass('expand');
                });
            } else {
                li.addClass('nochild');
            }
        });
    });
    /***
      Iframe modal
    ***/
$(function() {
    $('[data-toggle=modal]').on('click', function(e) {
        var id = $(this).attr('data-target').substr(1);
        window.parent.$("#" + id).modal();
    })
});
/***
  fancybox
***/
$(function() {
    $('.fancybox').click(function(e) {
        e.preventDefault();
        window.parent.$.fancybox({
            href: this.href,
            title: this.title
        });
    });
    $('.fancybox_iframe').click(function(e) {
        e.preventDefault();
        window.parent.$.fancybox({
            type: 'iframe',
            padding: 20,
            href: this.href

        });
    });
})
$(function() {
    // Collapse ibox function
    $('.collapse-link').on('click', function(e) {
        var ibox = $(this).closest('div.ibox');
        var button = $(this).find('i');
        var content = ibox.find('div.ibox-content');
        content.slideToggle(200);
        button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');
        ibox.toggleClass('').toggleClass('border-bottom');
        setTimeout(function() {
            ibox.resize();
            ibox.find('[id^=map-]').resize();
        }, 50);
    });

    // Close ibox function
    $('.close-link').on('click', function(e) {
        var content = $(this).closest('div.ibox');
        content.remove();
    });

    // Small todo handler
    $('.check-link').on('click', function(e) {
        var button = $(this).find('i');
        var label = $(this).next('span');
        button.toggleClass('fa-check-square').toggleClass('fa-square-o');
        label.toggleClass('todo-completed');
        return false;
    });


    // minimalize menu
    $('.navbar-minimalize').on('click', function(e) {
        $("body").toggleClass("mini-navbar");
        SmoothlyMenu();
    })

    // tooltips
    $('.tooltip-demo').tooltip({
        selector: "[data-toggle=tooltip]",
        container: "body"
    })

    // Full height of sidebar
    function fix_height() {
        var heightWithoutNavbar = $("body > #wrapper").height() - 61;
        $(".sidebard-panel").css("min-height", heightWithoutNavbar + "px");
    }
    fix_height();

    $(window).bind("load resize click scroll", function() {
        if (!$("body").hasClass('body-small')) {
            fix_height();
        }
    })

    $("[data-toggle=popover]")
        .popover();
});


// For demo purpose - animation css script
function animationHover(element, animation) {
    element = $(element);
    element.hover(
        function() {
            element.addClass('animated ' + animation);
        },
        function() {
            //wait for animation to finish before removing classes
            window.setTimeout(function() {
                element.removeClass('animated ' + animation);
            }, 2000);
        });
}

// Minimalize menu when screen is less than 768px
$(function() {
    $(window).bind("load resize", function() {
        if ($(this).width() < 769 && !$('body').hasClass('mini-navbar')) {
            $('body').addClass('mini-navbar');
        } else if ($(this).width() >= 769 && $('body').hasClass('mini-navbar')) {
            $('body').removeClass('mini-navbar');
            SmoothlyMenu();
        }
    })
})

function SmoothlyMenu() {
    if (!$('body').hasClass('mini-navbar') || $('body').hasClass('body-small')) {
        // Hide menu in order to smoothly turn on when maximize menu
        $('#side-menu').hide();
        // For smoothly turn on menu
        setTimeout(
            function() {
                $('#side-menu').fadeIn(500);
            }, 100);
    } else {
        // Remove all inline style from jquery fadeIn function to reset menu state
        $('#side-menu').removeAttr('style');
    }
}

// Dragable panels
function WinMove() {
    $("div.ibox").not('.no-drop')
        .draggable({
            revert: true,
            zIndex: 2000,
            cursor: "move",
            handle: '.ibox-title',
            opacity: 0.8,
            drag: function() {
                var finalOffset = $(this).offset();
                var finalxPos = finalOffset.left;
                var finalyPos = finalOffset.top;
                // Add div with above id to see position of panel
                $('#posX').text('Final X: ' + finalxPos);
                $('#posY').text('Final Y: ' + finalyPos);
            },
        })
        .droppable({
            tolerance: 'pointer',
            drop: function(event, ui) {
                var draggable = ui.draggable;
                var droppable = $(this);
                var dragPos = draggable.position();
                var dropPos = droppable.position();
                draggable.swap(droppable);
                setTimeout(function() {
                    var dropmap = droppable.find('[id^=map-]');
                    var dragmap = draggable.find('[id^=map-]');
                    if (dragmap.length > 0 || dropmap.length > 0) {
                        dragmap.resize();
                        dropmap.resize();
                    } else {
                        draggable.resize();
                        droppable.resize();
                    }
                }, 50);
                setTimeout(function() {
                    draggable.find('[id^=map-]').resize();
                    droppable.find('[id^=map-]').resize();
                }, 250);
            }
        });
}
jQuery.fn.swap = function(b) {
    b = jQuery(b)[0];
    var a = this[0];
    var t = a.parentNode.insertBefore(document.createTextNode(''), a);
    b.parentNode.insertBefore(a, b);
    t.parentNode.insertBefore(b, t);
    t.parentNode.removeChild(t);
    return this;
};

/*iCheck*/
$(function() {
    $('input.i-checks').iCheck({
        checkboxClass: 'icheckbox',
        radioClass: 'iradio'
    });
});

/*FileUpload*/
$(function() {
    $('.fileinput-preview + div > .upload-btn').on('click', function(event) {
        event.preventDefault();
        $(this).parent().prev('.fileinput-preview').append('<span><i class="fa fa-spinner fa-spin"></i></span>');
        $(this).attr('disabled', true); //避免用户多次提交
    });
});

/*custom-fileupload*/
$(function() {
    $('.custom-fileupload input[type=file]').change(function(event) {
        var path = $(this).val();
        var filename = path.replace(/^.*\\/, "");
        var filenameinput = $(this).parent().parent().prev().find('input');
        var filenameicon = filenameinput.prev();
        filenameinput.val(filename);
        filenameicon.removeClass('hidden');
    });
});

/*表单form*/
$(function() {
    $('#form-submit').submit(function(event) { // 避免用户多次提交
        var subButton = $(this).find(':submit');
        subButton.html('<i class="fa fa-spin fa-spinner"></i>    正在提交').attr('disabled', true);
        return false;
    });
})

/*外部链接新建标签显示*/
$(function() {
    $('a[href^="http://"],a[href^="https://"]').attr('target', '_blank');
})

/*datepicker*/
$(function() {
    $('.date').on('click', '.clear-btn', function(event) {
        event.preventDefault();
        $(this).siblings('input').val("");
    });
})

/* --------------------------------------------------------
    scrollUp 
-----------------------------------------------------------*/
$(function() {
    var body$ = $('body');
    if (!body$.hasClass('index') && !body$.hasClass('login-body')) {
        var scrollCont = '<a id="scrollUp" href="#"><i class="fa fa-angle-up"></i></a>';
        body$.append(scrollCont);
        $(window).scroll(function() {
            if ($('body').scrollTop() > '200' && $('#scrollUp').length) {
                $('#scrollUp').show();
            } else {
                $('#scrollUp').hide();
            }
        });
    };

    $('#scrollUp').on('click', function(event) {
        event.preventDefault();
        $('body').animate({
            scrollTop: 0
        }, 500);
    });
});
$(function(){
	
	
	//   new Date().Format("yyyy-MM-dd hh:mm:ss");
	Date.prototype.Format = function(fmt)   
	{ //author: meizz   
	  var o = {   
	   "M+" : this.getMonth() + 1,                 //月份   
	   "d+" : this.getDate(),                    //日   
	   "h+" : this.getHours(),                   //小时   
	   "m+" : this.getMinutes(),                 //分   
	   "s+" : this.getSeconds(),                 //秒   
	   "q+" : Math.floor((this.getMonth()+3)/3), //季度   
	   "S"  : this.getMilliseconds()             //毫秒   
	  };   
	  if(/(y+)/.test(fmt))   
	    fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));   
	  for(var k in o)   
	  if(new RegExp("("+ k +")").test(fmt))   
	  fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));   
	  return fmt;   
	} 
});
$(function(){
	$('.alert-close').on('click',function(){
		$(this).parents('.alert').fadeOut();
	});
	$(':text').on('blur',function(){
    	$(this).val($(this).val().trim());
    });
    $('textarea').on('blur',function(){
        $(this).val($(this).val().trim());
    });
//	$('.slide-div').hover(function(){
//		$(this).animate({'width': '60%'},'slow');
//	},function(){
//		$(this).animate({'width': '300px'},'slow');
//	});
    //禁止退格键 作用于IE、Chrome  
    document.onkeydown = banBackSpace;
    // 适用于firefox
    if(typeof window.event == 'undefined') {  
        document.onkeypress = function(e) {  
           var type = e.target.localName.toLowerCase();  
           var code = e.keyCode;  
           if ((code != 8 && code != 13) ||  
               (type == 'input' && code != 13 ) ||  
               (type == 'textarea') ||  
               (type == 'submit' && code == 13)) {  
               return true;  
           } else {  
               return false ;  
           }  
       }  
   } 
    // 用来监听pace 层消失的事件
    if(window.frames.length != parent.frames.length){
    	$('body').append('<div class="changhong-pace-layer"></div>');
	    var paceTime = setInterval(function(){
	    	if($('.pace').hasClass('pace-inactive')){
	    		$('.changhong-pace-layer').remove();
	    		clearInterval(paceTime);
	    	}
	    },500);
    }
})
function isEmpty(s){
	return s == null || s == '' || s == undefined || s == 'null';
};
function displayTip(msg){
	if(msg == 'a' || isEmpty(msg)){
		return false;
	}
	var param = {
			timer: true,
			msg: msg
	};
	if(msg.indexOf('失败') > 0){
		param.msgType = 'danger';
		param.center = true;
		param.layer = true;
	}
    $.chongAlert(param).show();
}
function displayMsg(msg,type){
	if(!msg){
		return false;
	}
	var param = {
		timer: true,
		msg: msg
	};
	switch(type){
	case 1:
		param.msgType = 'warn';
		break;
	case 2:
		param.msgType = 'danger';
		param.center = true;
		param.layer = true;
		break;
	case 3:
		return false;
		break;
	default:
		break;
	}
    $.chongAlert(param).show();
}
//处理键盘事件 禁止后退键（Backspace）密码或单行、多行文本框除外，适用于ie，chrome
function banBackSpace(e){  
    //alert(event.keyCode)  
    var ev = e || window.event;//获取event对象     
    var obj = ev.target || ev.srcElement;//获取事件源       
    var t = obj.type || obj.getAttribute('type');//获取事件源类型       
    //获取作为判断条件的事件类型   
    var vReadOnly = obj.readOnly;  
    var vDisabled = obj.disabled;  
    //处理undefined值情况   
    vReadOnly = (vReadOnly == undefined) ? false : vReadOnly;  
    vDisabled = (vDisabled == undefined) ? true : vDisabled;  
    //当敲Backspace键时，事件源类型为密码或单行、多行文本的，    
    //并且readOnly属性为true或disabled属性为true的，则退格键失效    
    var flag1 = ev.keyCode == 8 && (t == "password" || t == "text" || t == "textarea") && (vReadOnly == true || vDisabled == true);  
    //当敲Backspace键时，事件源类型非密码或单行、多行文本的，则退格键失效      
    var flag2 = ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea";  
    //判断      
    if (flag2 || flag1)   
        event.returnValue = false;//这里如果写 return false 无法实现效果   
} 
function htmlTemplate(template, data, allowEmpty, chats) {
    var regExp;
    chats = chats || ['\\$\\{', '\\}'];
    regExp = [chats[0], '([_\\w]+[\\w\\d_]?)', chats[1]].join('');
    regExp = new RegExp(regExp, 'g');
    return template.replace(regExp,
        function (s, s1) {
            if (data && data[s1] != null && data[s1] != undefined) {
                return data[s1];
            } else {
                return allowEmpty ? '' : s;
            }
        });
}
function strToObj(str){  
    str = str.replace(/&/g,"','");  
    str = str.replace(/=/g,"':'");  
    str = "({'"+str +"'})";  
    obj = eval(str);   
    return obj;  
}
$(function(){
	$.ajaxSetup({
		global: true,
		complete: function(data){
			if(data.responseText){
				if(data.responseText.indexOf('login-page') >= 0){
					top.location.href = 'login';
				}
				try{
				var dt = JSON.parse(data.responseText);
				displayMsg(dt.message,dt.remind);
				}catch(e){
					console.log(e);
				}
			}
		}
	});
	if(jQuery.validator){
		jQuery.validator.addMethod("versionLimite", function(value, element, param) {
			var tel = /^[A-Za-z0-9.]*$/;
		    return this.optional(element) || (tel.test(value));   
		},$.validator.format("版本号只能输入数字，字母，."));
		jQuery.validator.addMethod('isNotChinese', function(value, element,param){
			var chn = new RegExp("^[a-zA-Z0-9_]*$");
			return this.optional(element) || (chn.test(value));
		},$.validator.format("只能输入数字,字母,_"));
		jQuery.validator.addMethod('isNumberOrLetter', function(value, element,param){
			var nl = new RegExp("^[A-Za-z0-9]+$");
		    return this.optional(element) || (nl.test(value));
		});
	}
});
/**
 * 获取浏览器参数的值
 * @param name 需要获取的值
 * @returns
 */
function getQueryString(name)
{
     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
     var r = window.location.search.substr(1).match(reg);
     if(r!=null)return  unescape(r[2]); return null;
}
/**
 * 给form表单赋值
 * @param form
 * @param formJson
 * @returns {Boolean}
 */
function setForm(form, formJson){
	if(!formJson){
		return false;
	}
	$.each(formJson,function(name,value){
		var input = $($(form)[0]).find($('[name="'+name+'"]'));
		if(input){
			input.val(value);
		}
	});
}
/**
 * form表单中的元素格式化成json格式
 * example: $('#searchForm').serializeJson()
 * 输出: {name: '', id: ''...}
 */
$.fn.serializeJson=function(){  
    var serializeObj={};  
    $(this.serializeArray()).each(function(){ 
    	if(serializeObj[this.name]){
    		serializeObj[this.name] += ',' + this.value;
    	}else{
        serializeObj[this.name]=this.value; 
    	} 
    });  
    return serializeObj;  
};
$.fn.nopic = function(url){
	$(this).error(function(){
		if(url){
			$(this).attr('src',url);
		}
	});
}
$(function(){
    function initDateWith(){
    	var silbings = '';
    	$('.search-area-content-left .input-sm').each(function(key,value){
    		if(!$(value).hasClass('search-date')){
    			silbings = $(value);
    			return false;
    		}
    	});
    	if(silbings){
    		if($('.search-area-content-left .date')
    				.parent('.form-group')
    				.hasClass('search--content')){
    			return false;
    		}
        	$('.search-area-content-left .date').width(silbings.width() +
        			parseInt(silbings.css('padding-left')) +
                    parseInt(silbings.css('padding-right')) +
        			2);
    	}
    }
    initDateWith();
    $(window).resize(function() {
    	initDateWith();
    });
});
function replaceSpical(str){
    str = str.toString().replace(new RegExp(/(>)/g),'&gt');
    str = str.replace(new RegExp(/(<)/g),'&lt');
    return str;
}
var simpleRender = function(val1,val2,val3){
    if(val1 != 0 && !val1){
        val1 = '';
    }
    val1 = replaceSpical(val1);
    // val1 = replaceAll(replaceAll(val1,'>','&gt'),'<','&lt');
    return '<span title="'+val1+'" class="overflowdot">'+val1+'</span>';
};
var imgRender = function(val1,va2,val3){
    val1 = val1 = replaceSpical(val1);
    return '<img src="'+val1+'" class="img-rounded"/>';
};
/**
 * 精确到秒的时间格式化
 */
var secRender = function(val1, val2, val3){
	return new Date(val1).Format('yyyy-MM-dd hh:mm:ss');
};
/**
 * 精确到天的时间格式化
 */
var dayRender = function(val1, val2, val3){
	return new Date(val1).Format('yyyy-MM-dd');
};
/**
 * 渲染控件
 */
(function(){
    window.CHIQ = window.CHIQ || {};
    CHIQ.ui = CHIQ.ui || {};
    CHIQ.contentFill = CHIQ.contentFill || {};
    /**
     * 重新包装ajax方法，对数据进行处理
     * 统一错误处理
     * @param param
     */
    CHIQ.ajax = function(param){
        var params = $.extend({},param,{
            success: function(data){
                if(parseInt(data.code) != 1000){
                    displayMsg(data.message,data.remind);
                    if(param.error){
                        param.error(data);
                    }
                    return false;
                }
                if(param.success){
                    if(data.code){
                        param.success(data.data);
                        return false;
                    }
                    param.success(data);
                }
            },
            error: function(data){
                displayMsg('系统错误，请联系管理员',1);
            }
        });
        $.ajax(params);
    };
    // mmgrid 默认配置
    CHIQ.mmgParam = {
            shown: function(gBody, items){
                gBody.find('img').nopic('ui/images/nopic.png');
            }
            , height: 'auto'
            , lockWidth:true
            , method: 'POST'
            , fullWidthRows: true
            , root: 'items'
            , dataName: 'data'
            , autoLoad: false
    }
    /**
     *
     * @type {{
     * parentEl: 需要绑定控件的元素,
     * url: 请求模板的地址
     * localFlag: 本地模板标记，为true时表示直接加载模板无须加载,
     * localTpl: 本地模板文件
     * replaceFlag: 需要做元素替换，为true时表示需要做元素替换 ps:此功能为画蛇添足，可以在successCbk中自行处理
     * replaceItem: 需要做元素替换时的json对象
     * errorTip: 加载模板失败时显示的提示,
     * successCbk: 加载模板成功时的回调函数,
     * errorCbk: 加载模板失败时的回调函数
     * }}
     */
    CHIQ.contentFill.options = {
        parentEl: $( 'body'),
        url: '',
        localFlag: false,
        localTpl: '',
//        replaceFlag: false,
//        replaceItem: {},
//        replaceIfList: {},
        errorTip: '模板加载失败。。。<a href="javascript:void(0);" class=""></a>',
        successCbk: function(contentFill,parent,el,options){
            console.log(contentFill);
        },
        errorCbk: function(contentFill,msg){
            console.log(msg);
        }
    };
    var instances = {};
    /**
     * 获取需要加载的模板
     * @method setAttr
     * @param { String } url 需要加载的模板的地址
     * @param { * } contentFill 当前控件
     * @return { * } 需要加载的模板
     * @example
     * 内部函数无须例子
     */
    CHIQ.contentFill = function(){
        // this.render();
    };
    CHIQ.contentFill.replaceTpl = htmlTemplate;
    CHIQ.contentFill.prototype = {
        init: function(opt){
            this.options = $.extend(this.options,opt);
            this.parentEl = this.options.parentEl;
            var options = this.options;
            if(options.hasTpl){
                this.successFlag = true;
                this.body = $(this.parentEl).html();
            }else
            if(options.localFlag){
                this.successFlag = true;
                this.body = options.localTpl;
            }else{
                if(!this.body || !this.successFlag){
                    this.body = getTpl(options.url, this);
                }
            }
        },
        initTpl: function(item, nopicUrl){
            if(!item){
                return false;
            }
            setHtml(this.parentEl, item, nopicUrl);
        },
        renderer: function(){
            this.render();
            if(this.successFlag){
                this.options.successCbk(this,this.body,this.parentEl,this.options);
            }else{
                this.options.errorCbk(this,'加载模板失败');
            }
        },
        /**
         * 获取需要加载的模板
         * @method replaceHtml
         * @param { String } url 需要加载的模板的地址
         * @param { * } contentFill 当前控件
         * @return { * } 需要加载的模板
         * @example
         * 内部函数无须例子
         */
        replaceHtml: function(){
            if(this.options.replaceFlag){
                return this.replaceTpl(this.body,this.options.replaceItem, true, this.options.replaceIfList);
            }
            return this.body;
        },
        render: function(){
            if(!this.options.hasTpl){
                this.parentEl.html(this.replaceHtml());
            }
        },
        hide: function(){
            this.parentEl.hide();
        },
        show: function(){
            this.parentEl.show();
        },
        remove: function(){
            this.parentEl.remove();
        },
        empty: function(){
            this.parentEl.empty();
        },
        reload: function(){
            this.renderer();
        }
    };
    /**
     * 获取需要加载的模板
     * @method setAttr
     * @param { String } url 需要加载的模板的地址
     * @param { * } contentFill 当前控件
     * @return { * } 需要加载的模板
     * @example
     * 内部函数无须例子
     */
    function getTpl(url, contentFill){
    	var tpl = '';
        $.ajax({
        	url: url,
        	async: false,
        	cache: false,
        	type: 'GET',
        	success: function(data){
        		tpl = data;
        		contentFill.successFlag = true;
        	},
        	error: function(data){
        		tpl = '';
        		contentFill.successFlag = true;
        	}
        });
        return tpl;
    }
    function setHtml(html, items, nopicUrl){
        $.each($(html).find('.cf-attr'),function(index, value){
            if($(value).hasClass('cf-title')){
                if(items[$(value).attr('cf-title')]){
                    $(value).attr('title',items[$(value).attr('cf-title')]);
                }else{
                    $(value).attr('title',items[$(value).attr('cf-key')]);
                }
            }
            // 表单元素赋值
            if($(value).hasClass('cf-value')){
                $(value).val(items[$(value).attr('cf-key')]);
                return;
            }
            // img元素赋值
            if($(value).hasClass('cf-src')){
                $(value).attr('src',items[$(value).attr('cf-key')]);
                if($(value).is('img') && nopicUrl){
                    $(value).nopic(nopicUrl);
                }
                return;
            }
            // 带样式的文本替换
            if($(value).hasClass('cf-append')){
                $(value).html(items[$(value).attr('cf-key')]);
                return;
            }
            // 三目运算
            if($(value).hasClass('cf-three')){
                var keys = $(value).attr('cf-key').split('?');
                $(value).text(eval(items[keys[0]] + '?' + keys[1]));
                return;
            }
            $(value).text(items[$(value).attr('cf-key')]);
        });
    }
    CHIQ.getContentFill = function(id,opt){
        opt.parentEl = $('#' + id);
        var contentFill = instances[id];
        if (!contentFill) {
        	contentFill = instances[id] = new CHIQ.contentFill(opt);
        }
        contentFill.init(opt);
        contentFill.renderer();
        return contentFill;
    };
})();
/**
 * 上传控件
 */
(function(){
    window.CHIQ = window.CHIQ || {};
    CHIQ.ui = CHIQ.ui || {};
    var NOFILE = -1;// 标识没有文件
    CHIQ.uploader = function(opts){
        opts.server = opts.url;
        if(opts.fileSingleSizeLimit){
            opts.fileSingleSizeLimit = opts.fileSingleSizeLimit * 1024;
        }
        if(opts.fileType){
            opts = $.extend({multiple: false,
                // 不压缩image, 默认如果是jpeg，文件上传前会压缩一把再上传！
                resize: false,
                swf: PJ_URL + '/ui/js/plugins/ueditor/third-party/webuploader/Uploader.swf',
                accept: {
                    extensions: opts.fileType
                },
                // 选择文件的按钮。可选。
                // 内部根据当前运行是创建，可能是input元素，也可能是flash.
                pick: {
	                    id: opts.uploadId,
	                    multiple : opts.multiple
                	}
                },
                opts
            );
            if(opts.upType && opts.upType == 'image'){
                opts.accept = {
                    title: 'Images',
                    extensions: opts.fileType,
                    mimeTypes: 'image/*'
                };
            }
        }else{
            opts = $.extend({multiple: false,
                // 不压缩image, 默认如果是jpeg，文件上传前会压缩一把再上传！
                resize: false,

                // 选择文件的按钮。可选。
                // 内部根据当前运行是创建，可能是input元素，也可能是flash.
                pick: {
                    id: opts.uploadId,
                    multiple : opts.multiple
                }},opts);
        }
        this.options = opts;
        var $list = $(opts.place),
            // $btn = opts.uploadBtn,
            state = 'pending';
        var uploader = WebUploader.create(this.options);
        // 当有文件添加进来的时候
        uploader.on( 'fileQueued', function( file ) {
            if(opts.upType && opts.upType == 'image'){
                var $li = $(
                            '<div id="' + file.id + '" class="file-item thumbnail">' +
                            '<img>' +
                            '</div>'
                    ),
                    $img = $li.find('img');


                // $list为容器jQuery实例
                if(!opts.multiple){
                    $list.html( $li );
                }else{
                    $list.append( $li );
                }

                // 创建缩略图
                // 如果为非图片文件，可以不用调用此方法。
                // thumbnailWidth x thumbnailHeight 为 100 x 100
                uploader.makeThumb( file, function( error, src ) {
                    if ( error ) {
                        $img.replaceWith('<span>不能预览</span>');
                        return;
                    }

                    $img.attr( 'src', src );
                }, opts.imageWidth, opts.imageHeight );
                return false;
            }
            if(opts.multiple){
                $list.append( '<div id="' + file.id + '" class="item">' +
                    '<h4 class="info">' + file.name + '</h4>' +
                    '<p class="state">等待上传...</p>' +
                    '</div>' );
            }else{
                $list.html( '<div id="' + file.id + '" class="item">' +
                    '<h4 class="info">' + file.name + '</h4>' +
                    '<p class="state">等待上传...</p>' +
                    '</div>' );
            }
        });
        uploader.on('beforeFileQueued',function(val1, val2, val3){
        	uploader.willFile = true;
        });
        // 文件上传过程中创建进度条实时显示。
        uploader.on( 'uploadProgress', function( file, percentage ) {
            var $li = $( '#'+file.id ),
                $percent = $li.find('.progress .progress-bar');

            // 避免重复创建
            if ( !$percent.length ) {
                $percent = $('<div class="progress progress-striped active">' +
                    '<div class="progress-bar" role="progressbar" style="width: 0%">' +
                    '</div>' +
                    '</div>').appendTo( $li ).find('.progress-bar');
            }

            $li.find('p.state').text('上传中');

            $percent.css( 'width', percentage * 100 + '%' );
        });

        uploader.on( 'uploadSuccess', function( file , obj) {
//            $( '#'+file.id ).find('p.state').text('已上传');
            if(opts.successCbk){
                opts.successCbk(file, obj);
            }
        });

        uploader.on( 'uploadError', function( file ) {
            $( '#'+file.id ).find('p.state').text('上传出错');
        });
        uploader.on( 'error', function( file, obj ) {
        	uploader.willFile = false;
            var errormsg = '请选择文件';
            if(typeof file == 'string'){
                switch(file){
                    case 'Q_EXCEED_SIZE_LIMIT':
                    case 'F_EXCEED_SIZE':
                        var size = opts.fileSingleSizeLimit/1024;
                        var filesize = size + 'KB';
                        if(size/1024>=1){
                            filesize = size/1024 + 'MB';
                        }
                        errormsg = '文件大小超出限制, 请传入小于' + filesize;
                        break;
                    case 'Q_TYPE_DENIED':
                        errormsg = '文件格式不正确, 请传入' + opts.fileType;
                    default :
                        break;
                }
            }
            $( '.file-item div').html('<span style="color: #f00">' + '上传出错,' + errormsg + '</span>');
            if(opts.errorCbk){
                opts.errorCbk();
            }
            // $( '#'+file.id ).find('p.state').text('上传出错');
        });
        uploader.on( 'uploadComplete', function( file ) {
            $( '#'+file.id ).find('.progress').fadeOut();
        });
        uploader.on( 'uploadNoFile', function( file ) {
        	opts.errorCbk(NOFILE);
        });
        this.uploader = uploader;

    };
    CHIQ.uploader.prototype = {
        load: function(){
        	if(this.uploader.willFile){
        		this.uploader.upload();
        	}else{
        		this.uploader.trigger('uploadNoFile');
        	}
            
        }
    };
    CHIQ.getUploader = function(opts){
        return new CHIQ.uploader(opts);
    };
})();
function delAlert(url,msg,mmg){
    BootstrapDialog.show({
        title: '删除',
        message: msg,
        buttons: [{
            label: '确定',
            action: function(dialog){
                $(this).addClass('hidden');
                $.ajax({
                    url: url,
                    type: 'POST',
                    success: function(){
                        dialog.close();
                        mmg.load();
                    }
                });
            }
        },
            {
                label: '取消',
                action: function(dialog){
                    dialog.close();
                }
            }
        ]
    });
}
/*!
 * message
 */
(function($){

    $.chongAlert = function(options){
        var self = this;
        var timeTemp = 0;
        this.alertContent = '';
        this.close = function(){
            $(self.alertContent).fadeOut(function(){
                $(this).remove();
                $('body').children('.chong-alert-parent').remove();
                clearTimeout(timeTemp);
            });
        };
        this.show = function(){
            var chongAlert = '';
            var chongContent = '';
            var chongLayer = '';
            var tpl =
                '<div class="chong-alert-content">' +
                '<div class="chong-layer"></div>' +
                '<div class="alert chong-alert-right chong-alert alert-' +
                this.defaultOptions.msgType +
                ' alert-dismissable" id="errorShow">' +
                '<span class="alert-close">×</span>' +
                '<span class="alert-msg">' + this.defaultOptions.msg + '</span>' +
                '</div></div>';
            self.defaultOptions.show();
            if(self.defaultOptions.delOther){
                $('.chong-alert-content').remove();
            }
            if(self.defaultOptions.tpl){
                tpl = self.defaultOptions.tpl;
            }
            var parent = '';
            if($('body').children('.chong-alert-parent').length > 0){
                parent = $('body').children('.chong-alert-parent');
            }else{
                parent = $('body').append('<div class="chong-alert-parent"></div>')
                    .children('.chong-alert-parent');
            }
            chongContent = parent.append(tpl).find('.chong-alert-content').last();
            this.alertContent = chongContent;
            chongContent.find('.alert-close').on('click',function(){
                self.defaultOptions.close();
            });
            chongAlert = chongContent.find('.chong-alert');
            chongLayer = chongContent.find('.chong-layer');
            if(self.defaultOptions.center){
                var marginTop = -chongAlert.height()/2 + 'px';
                var marginLeft = -chongAlert.width()/2 + 'px';
                chongAlert.removeClass('chong-alert-right').css({
                    top: window.innerHeight/2 + 'px',
                    left: window.innerWidth/2 + 'px',
                    'margin-left': marginLeft,
                    'margin-top': marginTop
                });
            }
            if(self.defaultOptions.layer){
                chongLayer.addClass('layer-true');
            }
            if(self.defaultOptions.timer){
                timeTemp = setTimeout(function(){
                    self.defaultOptions.timeOutFunc();
                    self.close();
                    clearTimeout(timeTemp);
                },self.defaultOptions.time);
            }
            if(self.defaultOptions.clickClose){
                $(self.alertContent).on('click',function(){
                    self.close();
                });
            }
        };
        this.defaultOptions = {
            // 点击关闭按钮时的回调
            close: function(){
                self.close();
            },
            // 自定义模板，默认为控件定义的模板
            tpl: undefined,
            // 显示alert时的回调函数
            show: function(){
            },
            // 是否显示遮罩层，默认不显示遮罩
            layer: false,
            // 点击遮罩层关闭，默认不关闭
            clickClose: false,
            // alert要显示的提示信息
            msg: '',
            // 是否居中，默认不居中
            center: false,
            // alert显示的类型，默认为提示信息{success: 提示信息（保存成功等）,danger: 错误信息}
            msgType: 'success',
            // 是否一致显示， 默认为一直显示
            timer: false,
            // 多少毫秒后自动消失，当timer为true时有效，
            time: 10000,
            // 超时的回调
            timeOutFunc: function(){},
            // 存在其他alert控件时的处理
            delOther: true // 当存在其他alert的时候，是否清楚其他alert，默认不动作
        };
        this.defaultOptions = $.extend(this.defaultOptions,options);
        return this;
    };
}(jQuery));
/*** 验证方法***/
/**
 * start time is smaller than end time
 * @param father
 * @param self
 * @returns boolean
 */
function validateTimeBigger(startTime,endTime){
    if(startTime && endTime){
        return Date.parse(startTime)<=Date.parse(endTime);
    }else{
        return true;
    }
}
/**
 * url 验证
 */
function isURL(str_url) {
    var strRegex = "^((https|http|ftp|rtsp|mms)?://)"
        + "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" // ftp的user@
        + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
        + "|" // 允许IP和DOMAIN（域名）
        + "([0-9a-z_!~*'()-]+\.)*" // 域名- www.
        + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名
        + "[a-z]{2,6})" // first level domain- .com or .museum
        + "(:[0-9]{1,4})?" // 端口- :80
        + "((/?)|" // a slash isn't required if there is no file name
        + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
    var re = new RegExp(strRegex);
    return re.test(str_url);
}
/**
 * 验证控件需要优化
 */
 function validDate(time1, time2){
     if(!validateTimeBigger(time1,time2)){
         var alert1 = $.chongAlert({
         timer: true,
         msg: '开始日期不能大于结束日期',
         msgType: 'danger'
         });
         alert1.show();
         return false;
     }else{
         return true;
     }
 };
//工程URL
 var PJ_URL;
 // 资源url
 var BASE_URL;   